package config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import org.springframework.context.annotation.PropertySource;

/**
 * spring的配置类 相当于applicationContext.xml 用于替代xml配置
 * <p>
 * 1 @Configuration不可以是final类型；
 * 2 @Configuration不可以是匿名类；
 * 3 嵌套的configuration必须是静态类。
 * 1.必须以类的形式提供配置类, 允许通过生成的子类进行运行时增强(Cglib动态代理)。
 * 2.配置类必须是non-final的 编译报错
 * 3.配置类必须是non-local的（即不能在方法中声明）(non-local是不是翻译成非局部的比较好
 * 可以使用第4个约束的代码对 AppConfigAux 的访问级别修改成private试一试,会报错的, 这一步的测试体现该类不能是private级别。
 * 不能在方法中声明 表示的是不能是局部内部类)
 * 4.必须将任何嵌套配置类声明为static。（不声明也可以正常使用？声明为静态是为了隔离-静态类行为上和顶层的类相似，不能访问外部类的成员，只能访问静态成员）
 * 5.@Bean方法可能不会反过来创建进一步的配置类（任何此类实例都将被视为常规bean，其配置注释仍未被检测到）。
 *
 * @author 黑马程序员 *
 * @Company http://www.itheima.com
 */
@Configuration
public class SpringConfiguration {

//    @Bean
//    public Chinese getChinese() {
//        return new Chinese();
//    }
//
//
//
//    /**正确写法*/
//    @Configuration
//    static class AppConfigAux {
//        @Bean
//        public English getEnglish() {
//            return new English();
//        }
//    }


    @Bean
    public AppConfig getAppConfig() {
        return new AppConfig();
    }

}
